%start AutomatFSM::Start
%class Automat
%package sys.fsm
%access package

%map AutomatFSM

%%

						
// Начальное состояние
Start		
{
	// Переход
	Start(Id:long, IdOnBuyer:long, PSAddress:String, 
	BuyerAddress:String, userName:String, quantity:int)                 
	// Конечное состояние
	Wait_PayingSystem_1_S
	// Действия
	{ start_A(Id, IdOnBuyer, PSAddress, BuyerAddress, 
	userName, quantity); }
}

// Ожидание ответа от системы оплаты
Wait_PayingSystem_1_S Entry { wait_PayingSystem_1_Entry_A(); } 
{
	// Первый переход
    Ack_PayingSystem_1_T			                        
	Wait_Buyer_1_S 	            
	{ ack_PayingSystem_1_A(); }	

	// Второй переход
    Timeout_1_T [ctxt.checkTimeout_1_Times() == true]		
	nil		                    
	{ timeout_1_A(); }

	// Третий переход
    Timeout_1_T				                                
	Cancel_S	                
	{}
}			

// Ожидание ответа от системы заказчика
Wait_Buyer_1_S Entry { wait_Buyer_1_Entry_A(); }
{
	// Первый переход
    Ack_Buyer_1_T                                               
	Done_S                      
	{ ack_Buyer_1_A(); }

	// Второй переход
    Nack_Buyer_1_T                                              
	Cancel_S                    
	{ nack_Buyer_1_A(); }

	// Третий переход
    Timeout_2_T [ctxt.checkTimeout_2_Times() == true]		    
	nil		                    
	{ timeout_2_A(); }

	// Четвертый переход
    Timeout_2_T				                                    
	Cancel_S	                
	{}
}

Cancel_S Entry { cancel_Entry_A(); }
{}

Done_S Entry { done_Entry_A(); }
{}

%%
